package logs

import (
	"fmt"
	log "github.com/cihub/seelog"
)

/*
seelog是用Go语言实现的一个日志系统，它提供了一些简单的函数来实现复杂的日志分配、过滤和格式化。主要有如下特性：
1、XML的动态配置，可以不用重新编译程序而动态的加载配置信息
2、支持热更新，能够动态改变配置而不需要重启应用
3、支持多输出流，能够同时把日志输出到多种流中、例如文件流、网络流等
4、支持不同的日志输出
  命令行输出
  文件输出
  缓存输出
  支持log rotate
  SMTP邮件
*/
func main1() {
	defer log.Flush()
	log.Info("Hello from Seelog!")
}

var Logger log.LoggerInterface

func loadAppConfig() {
	appConfig := `
	<seelog minlevel="warn">
    <outputs formatid="common">
        <rollingfile type="size" filename="/data/logs/roll.log" maxsize="100000" maxrolls="5"/>
		<filter levels="critical">
            <file path="/data/logs/critical.log" formatid="critical"/>
            <smtp formatid="criticalemail" senderaddress="lijianlong@yunhuigo.net" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword">
                <recipient address="xiemengjun@gmail.com"/>
            </smtp>
        </filter>
    </outputs>
    <formats>
        <format id="common" format="%Date/%Time [%LEV] %Msg%n" />
	    <format id="critical" format="%File %FullPath %Func %Msg%n" />
	    <format id="criticalemail" format="Critical error on our server!\n    %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
    </formats>
</seelog>
`
	logger, err := log.LoggerFromConfigAsBytes([]byte(appConfig))
	if err != nil {
		fmt.Println(err)
		return
	}
	UseLogger(logger)
}

func init() {
	DisableLog()
}

func UseLogger(newLogger log.LoggerInterface) {
	Logger = newLogger
}

func DisableLog() {
	Logger = log.Disabled
}
